package com.haobangs.imms.service.impl;

import com.haobangs.imms.domain.AlarmRecord;
import com.haobangs.imms.mapper.AlarmRecordMapper;
import com.haobangs.imms.service.IAnalysisService;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 数据分析Service业务层处理
 *
 * @author haobangs
 * @date 2024-03-30
 */
@Service
public class AnalysisImpl implements IAnalysisService
{
    @Autowired
    private AlarmRecordMapper alarmRecordMapper;
    /**
     * 查询故障次数和故障种类
     *
     * @param
     * @return 查询报警设备的结果
     */
    @Override
    public  List<Map<String, Object>> getFaultHistogram()  {
        List<AlarmRecord> alrmlist = new ArrayList<>();
        alrmlist = alarmRecordMapper.selectList(null);

        Map<String, Map<String, Integer>> monthlyAlarmCounts = new HashMap<>();

        // 遍历每条报警记录
        for (AlarmRecord record : alrmlist) {
            // 解析报警记录的日期和时间
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyMM");
            String monthYear = dateFormat.format(record.getEdgeTime());

            // 获取报警内容
            String content = record.getContent();

            // 如果该月份还没有被记录，则创建一个新的记录
            monthlyAlarmCounts.putIfAbsent(monthYear, new HashMap<>());

            // 获取该月份的报警内容计数Map
            Map<String, Integer> alarmCounts = monthlyAlarmCounts.get(monthYear);

            // 更新该报警内容的计数
            alarmCounts.put(content, alarmCounts.getOrDefault(content, 0) + 1);
        }

        // 创建mapList来存储统计结果
        List<Map<String, Object>> mapList = new ArrayList<>();

        // 遍历统计结果，将结果存储在mapList中
        for (Map.Entry<String, Map<String, Integer>> entry : monthlyAlarmCounts.entrySet()) {
            String monthYear = entry.getKey();
            Map<String, Integer> alarmCounts = entry.getValue();

            // 创建一个新的map来存储统计结果
            Map<String, Object> map = new HashMap<>();
            map.put("name", monthYear);  // 将月份和年份组合作为name
            map.put("kind", alarmCounts.size());  // 不同报警内容的种类数即为kind
            int totalTimes = alarmCounts.values().stream().mapToInt(Integer::intValue).sum();  // 计算总次数
            map.put("times", totalTimes);
            mapList.add(map);  // 将统计结果添加到mapList中
        }

        return mapList;
    }






}
